
/***************************************************************************
 *   jell - library                                                        *
 *                                                                         *
 *   Copyright (C) 2008 by kuerant                                         *
 *                         <kuerant@gmail.com>                             *
 *                                                                         *
 *   This library is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This library is distributed in the hope that it will be usefull, but  *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
 *   Library General Public License for more details.                      *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this library; if not, write to the Free Software   *
 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston,                *
 *   MA 02111-1307, USA                                                    *
 ***************************************************************************/

#ifndef JEFI_JELL_LOGGER_HPP
#define JEFI_JELL_LOGGER_HPP

#include "jell/logger.hpp"

namespace   jell
{

    //typedef void (* logger_type)(const char* category, const char* message, const char* file, int line );

    class   JellLogger  :   public  Logger
    {
    public  :
        JellLogger()
            : m_error_logger(NULL), m_info_logger(NULL), m_debug_logger(NULL),
              m_debugable(false)
        {}
        virtual ~JellLogger() {}

    public  :
        virtual void error(const char* category, const char* message, const char* file, int line ) throw ()
        {
            if (m_error_logger) {
                m_error_logger(category, message, file, line);
            }
        }

        virtual void info (const char* category, const char* message, const char* file, int line ) throw ()
        {
            if (m_info_logger) {
                m_info_logger(category, message, file, line);
            }
        }

        virtual void debug(const char* category, const char* message, const char* file, int line ) throw ()
        {
            if (m_debug_logger) {
                m_debug_logger(category, message, file, line);
            }
        }

    public  :
        virtual void enableDebug(void)  { m_debugable = true;  }
        virtual void disableDebug(void) { m_debugable = false; }
        virtual bool debugable(void)
        {
            if (m_debug_logger) {
                return  m_debugable;
            }

            return  false;
        }

    public  :
        virtual void setErrorLogger(logger_type logger) { m_error_logger = logger; }
        virtual void setInfoLogger(logger_type logger)  { m_info_logger  = logger; }
        virtual void setDebugLogger(logger_type logger) { m_debug_logger = logger; }

    private :
        logger_type m_error_logger;
        logger_type m_info_logger;
        logger_type m_debug_logger;

        bool        m_debugable;
    };  // class Logger

}   // namespace jell

#endif  // JEFI_JELL_LOGGER_HPP

